/******************************************************************************
 * Qwt Widget Library
 * Copyright (C) 1997   Josef Wilgen
 * Copyright (C) 2002   Uwe Rathmann
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the Qwt License, Version 1.0
 *****************************************************************************/

#ifndef QWT_COMPASS_H
#define QWT_COMPASS_H

#include "qwt_global.h"
#include "qwt_dial.h"
#include "qwt_round_scale_draw.h"

class QwtCompassRose;
class QString;
template<class Key, class T>
class QMap;

/*!
   \brief A special scale draw made for QwtCompass

   QwtCompassScaleDraw maps values to strings using
   a special map, that can be modified by the application

   The default map consists of the labels N, NE, E, SE, S, SW, W, NW.

   \sa QwtCompass
 */
class QWT_EXPORT QwtCompassScaleDraw : public QwtRoundScaleDraw
{
public:
  explicit QwtCompassScaleDraw();
  explicit QwtCompassScaleDraw(const QMap<double, QString> &map);

  virtual ~QwtCompassScaleDraw();

  void setLabelMap(const QMap<double, QString> &map);
  QMap<double, QString> labelMap() const;

  virtual QwtText label(double value) const QWT_OVERRIDE;

private:
  class PrivateData;
  PrivateData *m_data;
};

/*!
   \brief A Compass Widget

   QwtCompass is a widget to display and enter directions. It consists
   of a scale, an optional needle and rose.

   \image html dials1.png

   \note The examples/dials example shows how to use QwtCompass.
 */

class QWT_EXPORT QwtCompass : public QwtDial
{
  Q_OBJECT

public:
  explicit QwtCompass(QWidget *parent = NULL);
  virtual ~QwtCompass();

  void setRose(QwtCompassRose *rose);
  const QwtCompassRose *rose() const;
  QwtCompassRose *rose();

protected:
  virtual void drawRose(QPainter *, const QPointF &center, double radius,
                        double north, QPalette::ColorGroup) const;

  virtual void drawScaleContents(QPainter *, const QPointF &center,
                                 double radius) const QWT_OVERRIDE;

  virtual void keyPressEvent(QKeyEvent *) QWT_OVERRIDE;

private:
  class PrivateData;
  PrivateData *m_data;
};

#endif
